package de.nenov.tutorials.designpatterns.observer;

import java.util.ArrayList;

public class WeatherData implements ISubject{
    
	private ArrayList observers;  
    private float tempetature;  
    private float humidity;  
    private float pressure;  
                              
    public WeatherData(){  
        observers = new ArrayList();  
    }  
                          
    /** 
     * Wenn sich ein Observer registriert,  
     * hängen wir ihn einfach ans Ende der Liste an. 
     */  
    @Override  
    public void registerObserver(IObserver o) {  
        observers.add(o);  
    }  
                               
    /** 
     * Wenn sich ein Observer entfernen will,  
     * entfernen wir ihn gleichermassen einfach aus der Liste. 
     */  
    @Override  
    public void removeObserver(IObserver o) {  
        int index = observers.indexOf(o);  
        if( index >= 0 ){  
            observers.remove(index);  
        }  
    }  
                               
    /** 
     * Hier teilen wir allen Observer den Zustand mit.  
     * Weil sie alle Observer sind, wissen wir,  
     * dass sie <code>update()</code> implementieren,  
     * und wissen deswegen wie wir sie benachrichtigen können. 
     */  
    @Override  
    public void notifyObserver() {  
        for(int i = 0; i < observers.size(); i++){  
            IObserver observer = (IObserver) observers.get(i);  
            observer.update(tempetature, humidity, pressure);  
        }  
    }                         
   
    /** 
     * Wir benachtichtigen die Observer, 
     * wenn wir aktualisierte Werte bekommen.  
     */  
    public void measurementsChanged(){  
        notifyObserver();  
    }  
                               
    public void setMeasurements(float tempetature, float humidity, float pressure){  
        this.tempetature = tempetature;  
        this.humidity = humidity;  
        this.pressure = pressure;         
        measurementsChanged();  
    }  

}
